package com.ada.spark.rddoperator

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

/**
  * 在Spark中创建RDD的创建方式可以分为三种：
  * 从集合中创建RDD；
  * 从外部存储创建RDD；
  * 从其他RDD创建。
  */
object Spark01_RDD {
    def main(args: Array[String]): Unit = {
        //创建SparkConf
        val conf = new SparkConf().setAppName("Spark01_RDD").setMaster("local[*]")
        //创建Spark上下文对象
        val sc = new SparkContext(conf)

        //创建RDD
        //1)从内存中创建makeRDD，底层实现就是parallelize
        //val listRDD: RDD[Int] = sc.makeRDD(List(1, 2, 3, 4))

        //传递的分区数为最大分区数，如果指定，则按指定数量进行分区，否则，默认为cpu核数
        //val listRDD: RDD[Int] = sc.makeRDD(List(1, 2, 3, 4),3)

        //2)从内存中创建parallelize
        //val arrayRDD: RDD[Int] = sc.parallelize(Array(1, 2, 3, 4))

        //3)从外部存储中创建
        //默认情况下，可以读取项目路径，也可以读取其他路径：如HDFS
        //默认从文件中读取的数据都是字符串类型
        //val fileRDD: RDD[String] = sc.textFile("in")

        //读取文件时，传递的分区数为最小分区数，但是不一定是这个分区数，取决于hadoop读取文件时分片规则
        val fileRDD: RDD[String] = sc.textFile("in", 2)

        //println(listRDD.collect().mkString(","))
        //println(fileRDD.collect().mkString(","))

        //listRDD.saveAsTextFile("output")
        fileRDD.saveAsTextFile("output")
    }
}
